/**
 * 计数排序，本质就是hash映射，将数字映射到数组下标，数组下标对应的值就是这个数字出现的次数
 * 输出的时候只需要按照下标顺序，值是几就输出几次
 */
#include<stdlib.h>
#include<stdio.h>
//计数排序并不是一个在原空间中的排序，他需要申请一篇array_size大小的内存
void show(int array[],int n){
    for(int i=0;i<n;i++){
        printf("%d ",array[i]);
    }
    printf("\n");
}
#define MAX_VALUE 9999 //表示数组元素的最大值
#define pass
int numbers[]={49,38,65,97,76,13,27,49};
const int numbers_size=8;

void countSort(int array[],int array_size){
    int count_array[MAX_VALUE]={0};//注意，malloc后的数组并不是全为0
    for(int i=0;i<array_size;i++){//计数
        count_array[array[i]]++;
    }
    for(int i=0;i<MAX_VALUE;i++){
        for(int j=0;j<count_array[i];j++){//输出次数
            printf("%d ",i); 
        }
    }
    return;
}
int main(void){
    countSort(numbers,numbers_size);
    return 0;
}